// gui.h

#ifndef GUI_H
#define GUI_H

#ifdef __cplusplus
extern "C"
{
#endif

#include "stdio.h"
#include <string.h>
#include "bmp.h"
#include "font_display.h"
#include "font.h"

// 按钮样式宏定义
#define BUTTON_WIDTH      100
#define BUTTON_HEIGHT     50
#define BUTTON_RADIUS     10
#define BUTTON_COLOR      0x67E6FF   // 青色
#define BUTTON_TEXT_COLOR getColor(0, 0, 0, 0) // 黑色字体

// 屏幕宽度和高度
#define SCREEN_WIDTH 800
#define SCREEN_HEIGHT 480

// 商品信息宏定义
#define MAX_PATH_LEN 128
#define MAX_NAME_LEN 128

// 商品数量
#define GOOD_NUM 9

// 单个商品宽度和高度
#define GOOD_WIDTH 100
#define GOOD_HEIGHT 100

#define bgPath "./assert/images/bg.bmp"

#define WeChatPayImgPath "./assert/images/wechat.bmp" 

//背景主题色
#define BG_COLOR 0xFFFFFF

// 虚线颜色
#define DASH_COLOR 0x67E6FF

// 虚线边距
#define DASH_MARGIN 5

// 虚线宽度
#define DASH_WIDTH 5

// 每段虚线长度
#define DASH_LEN 5

// 每段虚线间隔长度
#define GAP_LEN 5

    // 页面路由枚举
    typedef enum
    {
        MAIN_PAGE,        // 主页面
        PAY_PAGE,         // 支付界面
        MAIN_SUCCESS_PAGE // 支付成功界面
    } PageRoute;

    // 支付类型枚举
    typedef enum
    {
        WECHAT_PAY, // 二维码支付
        FINGER_PAY  // 指纹支付
    } PayType;

    // 矩形区域
    typedef struct
    {
        int x;
        int y;
        int width;
        int height;
    } Area;

    // 间距
    typedef struct
    {
        int x;
        int y;
    } Padding;

    // 商品信息结构体
    typedef struct
    {
        char picturePath[MAX_PATH_LEN]; // 图片路径
        char name[MAX_NAME_LEN];        // 商品名称
        double price;
    } GoodInfo;

    // 全局元素位置定义
    extern Area adArea;             // 广告元素位置
    extern Area goodGroupArea;      // 商品组区域
    extern Padding goodPadding;     // 商品间距
    extern Area goodArea[GOOD_NUM]; // 每个商品的位置数组
    extern int cursorGoodIndex;     // 光标所在商品下标
    extern GoodInfo goodsInfo[GOOD_NUM];
    extern PageRoute currentPage;
    extern PayType currentPayType;
    extern Area weChatPayImgArea;   

    /**
     * @brief 初始化 goodArea 数组，根据 goodGroupArea 和 goodPadding 布局商品
     */
    void initGoodArea(void);

    /*
     * @brief 初始化商品信息
     */
    void init_goods_info(void);

    /*
     * @brief 绘制按钮
     */
    void draw_round_button(int x, int y, int width, int height, const char *text);

#ifdef __cplusplus
}
#endif

#endif /* GUI_H */
